마샬링 (컴퓨터 과학)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
마샬링은 컴퓨터 과학에서 프로세스 간 또는 스레드 간 데이터 전송을 위해 데이터를 변환하는 기술을 의미한다. 주로 원격 프로시저 호출(RPC) 구현, 컴포넌트 객체 모델(COM), .NET Framework의 P/Invoke 프로세스 등에서 사용된다. 마샬링은 직렬화와 유사하게 객체의 상태와 코드베이스를 기록하지만, 원격 객체를 특별히 다룬다는 점에서 차이가 있다. 데이터 전송 형식으로는 XML, JSON 등이 있으며, 언어 및 환경에 따라 마샬링과 직렬화의 정의가 다르게 사용될 수 있다.
더 읽어볼만한 페이지
- 지속성 - 직렬화
직렬화는 데이터 전송, 저장 등을 위해 데이터 구조를 바이트로 변환하는 과정이며, 아키텍처 독립성을 유지하고 다양한 형식으로 지원되지만 캡슐화 위반 등의 단점도 존재한다. - 지속성 - 스냅샷 (기억 장치)
스냅샷은 대용량 데이터 백업 시 데이터 손실 문제를 해결하고자 특정 시점의 파일 및 디렉터리 상태를 보존하는 기술이며, 백업 중 데이터 변경으로 인한 문제 방지, 시스템 다운타임 없이 읽기 전용 복사본 생성, 다양한 환경에서의 구현 및 활용이 가능하다. - 계산 모형 - 양자 컴퓨터
양자 컴퓨터는 양자역학적 현상을 이용하여 정보를 처리하는 컴퓨터로, 큐비트를 통해 0과 1을 동시에 표현하여 특정 연산에서 기존 컴퓨터보다 빠른 속도를 보이며 암호 해독, 신약 개발 등 다양한 분야에 혁신을 가져올 것으로 기대된다. - 계산 모형 - 양자 회로
양자 회로는 양자 컴퓨팅에서 양자 논리 게이트들을 연결한 회로로, 큐비트의 양자역학적 특성을 활용하여 계산을 수행하며 양자 계산의 핵심 요소로서 연구가 활발히 진행되고 있다. - 소프트웨어 구조 - Ajax
Ajax는 웹 페이지 전체를 새로고침하지 않고 비동기적으로 서버와 통신하여 웹 애플리케이션의 일부를 업데이트하는 웹 개발 기술로, XMLHttpRequest 객체의 등장으로 가능해졌으며 HTML, CSS, DOM, JavaScript, JSON 등의 기술을 통합하여 동적인 사용자 인터페이스를 구현한다. - 소프트웨어 구조 - 멀티테넌시
멀티테넌시는 단일 애플리케이션 인스턴스로 여러 고객에게 서비스를 제공하여 SaaS 및 클라우드 환경에서 비용과 관리 효율성을 높이고 데이터 활용 가치를 창출하는 소프트웨어 아키텍처 방식이다.
마샬링 (컴퓨터 과학) | |
---|---|
개요 | |
종류 | 컴퓨터 과학 |
분야 | 데이터 직렬화 |
목적 | 데이터 구조 또는 객체의 메모리 표현을 다른 컴퓨터 시스템으로 전송하거나 저장 및 복원하는 데 적합한 형식으로 변환 |
설명 | |
개념 | 마샬링은 원격 프로시저 호출 (RPC), 데이터베이스와 같은 분산 시스템에서 객체를 전송하는 데 사용 객체는 네트워크를 통해 전송하기에 적합한 형식으로 변환되어야 함 |
과정 | 이 과정을 통해 서로 다른 아키텍처 (예: 바이트 순서) 또는 운영 체제를 가진 시스템 간에 데이터 교환 가능 |
반대 과정 | 언마샬링 (unmarshalling) 또는 마샬링 해제라고 함 |
용도 | |
원격 프로시저 호출 (RPC) | 클라이언트와 서버 간의 데이터 교환 |
객체-관계 매핑 (ORM) | 객체와 데이터베이스 간의 데이터 변환 |
메시지 큐 | 메시지 큐 시스템에서 메시지 전송 |
직렬화 | 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위한 변환 |
추가 설명 | |
마샬링과 직렬화의 관계 | 마샬링은 종종 직렬화와 혼용되지만, 마샬링은 객체의 메모리 표현에서 독립적인 데이터 표현으로의 변환에 중점을 둠 직렬화는 객체를 바이트 스트림으로 변환하는 보다 일반적인 프로세스를 의미 |
예시 | 자바의 Remote Method Invocation (RMI) CORBA (Common Object Request Broker Architecture) WCF (Windows Communication Foundation) |
고려 사항 | |
성능 | 마샬링 과정은 성능에 영향을 미칠 수 있으므로 효율적인 마샬링 기술 중요 |
보안 | 마샬링된 데이터는 변조될 수 있으므로 보안 고려 필요 |
호환성 | 서로 다른 시스템 간의 호환성을 보장하기 위해 표준 데이터 형식을 사용해야 함 데이터 형식 변경 시 호환성 문제가 발생할 수 있음 |
2. 용도
마샬링은 원격 프로시저 호출(RPC) 외에도 다양한 환경에서 사용된다. 마이크로소프트 COM에서는 인터페이스 포인터를, 닷넷 프레임워크에서는 관리되지 않는 타입과 CLR 타입 간 변환에 마샬링이 필요하다.[18] 모질라 애플리케이션 프레임워크의 XPCOM 기술을 이용하는 스크립트와 응용 프로그램에서도 널리 사용된다.
2. 1. 원격 프로시저 호출 (RPC)
마셜링은 프로세스 간 또는 스레드 간 데이터 전송에 필요한 원격 프로시저 호출(RPC) 메커니즘 구현에 사용된다. 마이크로소프트 COM에서 인터페이스 포인터는 COM 아파트먼트 바운더리를 지날 때[16] 마셜링되어야 한다. 닷넷 프레임워크에서 P/Invoke 프로세스 하의 관리되지 않은 타입과 CLR 타입 간의 변환은 마셜링을 요구하는 또 하나의 예이다.[18]2. 2. 컴포넌트 오브젝트 모델 (COM)
마이크로소프트 컴포넌트 오브젝트 모델(COM)에서 인터페이스 포인터는 COM 아파트먼트 경계(COM 라이브러리 인스턴스들의 경계)를 지날 때[16][17] 마샬링 되어야만 한다.2. 3. 닷넷 프레임워크 (.NET)
닷넷 프레임워크(.NET)에서 P/Invoke 프로세스와 같이 관리되지 않는 형식과 CLR 형식 간의 변환은 마샬링이 필요한 작업의 예이다.[18]2. 4. 모질라 애플리케이션 프레임워크 (XPCOM)
모질라 애플리케이션 프레임워크에서 제공하는 XPCOM 기술을 사용하는 스크립트와 응용 프로그램에서 마샬링이 광범위하게 이용된다. 모질라 파이어폭스는 이 프레임워크로 만들어진 인기 있는 응용 프로그램이며, 스크립트 언어가 교차 플랫폼 연결(XPConnect)을 통해 XPCOM을 사용할 수 있게 한다.[16]2. 5. 기타
마샬링은 서로 다른 원격 프로시저 호출(RPC) 메커니즘 구현 내에서 사용되며, 프로세스 간 또는 스레드 간에 데이터를 전송해야 할 때 쓰인다.마이크로소프트의 구성 요소 개체 모델(COM)에서 인터페이스 포인터는 COM 아파트 경계를 넘을 때 마샬링되어야 한다.[6][7] .NET Framework에서 P/Invoke 프로세스와 같이 관리되지 않는 형식과 CLR 형식 간의 변환 역시 마샬링이 필요한 작업이다.[8]
또한 마샬링은 모질라 애플리케이션 프레임워크 내에서 제공되는 XPCOM 기술을 사용하는 스크립트와 응용 프로그램 내에서 광범위하게 사용된다. 모질라 파이어폭스 브라우저는 이 프레임워크로 구축된 인기 있는 응용 프로그램으로, 스크립트 언어가 XPConnect (Cross-Platform Connect)를 통해 XPCOM을 사용할 수 있도록 지원한다.
3. 직렬화와의 비교
마샬링과 직렬화는 데이터를 특정 형식으로 변환한다는 공통점이 있지만, 몇 가지 차이점이 있다.
파이썬 표준 라이브러리에서는 "마셜링"을 "직렬화"와 같은 의미로 사용하지만,[19] 자바 계열 RFC 2713에서는 다르게 취급한다. 마샬링은 객체의 상태뿐만 아니라 코드베이스(codebase)도 기록한다는 점에서 직렬화와 구별된다. 여기서 코드베이스는 소스 코드를 의미하는 것이 아니라, 자바에 국한되어 오브젝트 코드가 로드되는 URL 목록을 의미한다.
마샬링은 객체를 다른 프로세스나 환경으로 전달하는 전체 과정을 의미하며, 이 과정에서 직렬화가 사용될 수 있다. 반면, 직렬화는 단순히 객체의 상태를 바이트 스트림과 같은 형태로 변환하는 것을 의미하며, 다른 환경으로의 전달을 반드시 포함하지는 않는다.
"디(de)-직렬화"는 "서버 측에서" 직렬화된 객체를 '언(un)-마샬링'하여 내부 데이터 구조, 즉 대상 런타임 내의 라이브 객체로 변환하는 것을 의미한다.[1]
3. 1. 직렬화
"마셜링"은 파이썬 표준 라이브러리에서 "직렬화"와 같은 의미로 사용되지만,[19] 자바 계열 RFC 2713에서는 다르게 취급된다.객체를 "직렬화한다"는 것은 객체의 상태를 바이트 스트림으로 변환하여, 나중에 이 스트림을 통해 객체의 사본을 다시 만들 수 있게 하는 것을 의미한다.
마샬링은 직렬화와 비슷하거나 같은 의미로 쓰이기도 하지만, 엄밀히 말하면 직렬화는 객체를 마샬링하는 과정의 한 단계이다.
- 마샬링은 클라이언트에서 서버로 '살아있는' 객체를 보내는 전체적인 과정 또는 의도를 나타낸다. ('클라이언트'와 '서버'는 소켓과 같이 임의의 통신 연결의 양 끝을 의미하는 추상적인 개념이다.) 객체 마샬링의 핵심은 한 프로그램에 존재하는 객체를 다른 프로그램에도 존재하게 만드는 것이다. 즉, '클라이언트'의 객체가 '서버'로 전달되어야 하는데, 이는 객체의 구조, 데이터, 상태가 런타임 간에 이동할 수 있도록 하는 구체화의 한 형태이며, 중간에 직렬화된 "건조한" 표현(부차적으로 중요함)을 활용하여 통신 소켓으로 전달한다.
- 직렬화는 반드시 같은 의도를 갖는 것은 아니다. 객체의 중간 "건조한" 표현(예: 바이트 스트림)을 만들기 위해 데이터를 변환하는 것에만 관련되기 때문이다. 이 표현은 다른 런타임에서 구체화되거나, 데이터베이스, 파일, 또는 메모리에 저장될 수 있다.
따라서 마샬링과 직렬화는 다르게 수행될 수 있지만, 보통 마샬링을 하기 위해서는 어떤 형태의 직렬화가 사용된다.[1]
"디(de)-직렬화"는 "건조한" 객체를 "서버 측에서" '언(un)-마샬링'(즉 객체를 다시 얻기 위해 디마샬링 또는 언마샬링)하는 것과 다소 비슷하다. 다시 말해, 직렬화된 객체는 내부 데이터 구조, 즉 대상 런타임 내의 라이브 객체로 변환된다. 이것은 보통 마샬링의 정확한 반대 과정에 해당하지만, 때로는 과정의 양쪽 끝에서 특정 비즈니스 로직을 유발하기도 한다.
마샬링의 정확한 정의는 파이썬, 자바, .NET 등 프로그래밍 언어에 따라 다르며, 어떤 맥락에서는 직렬화와 바꿔서 사용되기도 한다.
3. 2. 마샬링
"마셜링"이라는 용어는 파이썬 표준 라이브러리에서는 "직렬화"라는 용어와 동일하게 간주되지만,[19] 자바 계열 RFC 2713에서는 동일하게 간주되지 않는다.객체를 "마셜링한다"는 것은 객체의 상태와 코드베이스를 기록하는 것을 의미한다. 이는 마셜링된 객체가 "언마셜링"될 때, 객체의 클래스 정의를 (아마도 자동적으로) 로딩함으로써 원본 객체의 사본을 얻는 방식으로 기록되는 것이다. 직렬화될 수 있거나 원격 객체는 무엇이든 마셜링할 수 있다. 마셜링은 코드베이스를 기록한다는 점을 제외하면 직렬화와 유사하며, 원격 객체(remote object)를 특별하게 다룬다는 점에서 직렬화와 다르다.[1] (RFC 2713)
여기서 사용되는 '코드베이스'는 소스 코드를 일컫는 일반적인 의미가 아니라, 자바에 국한되어 오브젝트 코드가 로드되는 URL 목록을 참조하는 것이다.
마샬링은 직렬화와 유사하거나 동의어이지만, 기술적으로 직렬화는 객체를 마샬링하는 과정의 한 단계이다.
- 마샬링은 클라이언트에서 서버로 '라이브' 객체를 전송하는 전반적인 의도 또는 프로세스를 설명한다. 여기서 '클라이언트'와 '서버'는 임의의 통신 링크(예: 소켓)의 양 끝에 매핑되는 추상적인 개념이다. 객체 마샬링의 요점은 하나의 '실행 중'인 프로그램에 존재하는 객체가 다른 '실행 중'인 프로그램에도 존재하도록 하는 것이다. 즉, '클라이언트'의 객체가 '서버'로 전송되어야 하는데, 이는 객체의 구조, 데이터 및 상태가 런타임에서 다른 런타임으로 이동할 수 있도록 하는 구체화의 한 형태이며, 중간의 직렬화된 "건조한" 표현(두 번째로 중요함)을 활용하여 통신 소켓으로 전달한다.
- 직렬화는 반드시 동일한 의도를 가지는 것은 아니다. 객체의 중간 "건조한" 표현(예: 바이트 스트림)을 생성하기 위해 데이터를 변환하는 데에만 관여하기 때문이다. 이 표현은 다른 런타임에서 구체화되거나, 데이터베이스, 파일 또는 메모리에 저장될 수 있다.
따라서 마샬링과 직렬화는 다르게 수행될 수 있지만, 일반적으로 마샬링을 수행하기 위해 어떤 형태의 직렬화가 사용된다.[1]
"디(de)-직렬화"라는 용어는 "서버 측에서" 건조한 객체를 '언(un)-마샬링'(즉, 객체를 다시 얻기 위해 디마샬링 또는 언마샬링)하는 것과 다소 유사하다. 즉, 직렬화된 객체는 내부 데이터 구조, 즉 대상 런타임 내의 라이브 객체로 변환된다. 일반적으로 마샬링의 정확한 역 프로세스에 해당하지만, 때로는 프로세스의 양쪽 끝에서 특정 비즈니스 로직을 트리거하기도 한다.
마샬링의 정확한 정의는 파이썬, 자바, .NET과 같은 프로그래밍 언어에 따라 다르며, 일부 맥락에서는 직렬화와 상호 교환적으로 사용된다.
3. 3. 언마샬링 (Unmarshalling)
"디(de)-직렬화"라는 용어는 "서버 측에서" 객체를 다시 얻기 위해 디마샬링(또는 언마샬링)하는 것과 다소 유사하다.[1] 즉, 직렬화된 객체는 내부 데이터 구조, 즉 대상 런타임 내의 라이브 객체로 변환된다. 일반적으로 언마샬링은 마샬링의 정확한 역 프로세스에 해당하지만, 때로는 프로세스의 양쪽 끝에서 특정 비즈니스 로직을 트리거하기도 한다.마샬링의 정확한 정의는 파이썬, 자바, .NET과 같은 프로그래밍 언어에 따라 다르며, 일부 맥락에서는 직렬화와 상호 교환적으로 사용된다.
자바 계열 RFC 2713에서는 오브젝트를 "마셜링한다"는 것은 그것의 상태와 코드베이스를 기록하는 것을 의미하며, 마셜링된 오브젝트가 "언마셜링" 될 때, 오브젝트의 클래스 정의를 자동적으로 로딩함으로써 원본 오브젝트의 사본을 얻는 방식으로 기록되는 방식이라고 정의한다.
언마샬링의 한 예는 객체의 XML 표현을 모든 프로그래밍 언어에서 객체의 기본 표현으로 변환하는 것이다. 다음은 그 예시이다.
- `Student` 객체의 XML 표현:
```xml
```
- 해당 `Student` 객체의 실행 가능한 표현:
```java
// 코드 조각 2
Student s1 = new Student();
s1.setID(11235813);
s1.setName("Jayaraman");
Student s2 = new Student();
s2.setID(21345589);
s2.setName("Shyam");
```
언마샬링은 위의 XML 표현을 기본 실행 가능한 자바 표현으로 변환하고, 해당 코드를 실행하여 일관되고 살아있는 객체를 다시 얻는 과정이다. 다른 형식을 선택했다면 언마샬링 과정은 달랐겠지만, 대상 런타임의 최종 결과는 동일했을 것이다.
4. 프로그래밍 언어별 마샬링
파이썬, 자바, .NET 등 다양한 프로그래밍 언어에서 마샬링을 지원하며, 구현 방식은 언어마다 다를 수 있다.
파이썬에서는 "marshal"이라는 용어가 파이썬 표준 라이브러리에서 특정 유형의 직렬화에 사용되는데[2], 이는 내부 파이썬 객체를 저장하는 경우에 해당한다.
자바 관련 원격 호출에서는 객체를 직렬화할 때 마샬링이 사용된다. 마샬링된 객체는 원래 객체의 상태와 코드베이스(객체 코드를 로드할 수 있는 URL 목록)를 포함한다.[4]
.NET에서도 원격 호출을 사용할 때 마샬링은 직렬화를 나타낸다.[5]
4. 1. 파이썬 (Python)
파이썬 표준 라이브러리에서 "marshal"이라는 용어는 특정 유형의 "직렬화"를 지칭하는 데 사용된다.[2] 이는 내부 파이썬 객체를 저장하는 경우에 해당한다.`marshal` 모듈은 주로 `.pyc` 파일에 파이썬 모듈의 "가상 컴파일된" 코드를 읽고 쓰는 기능을 지원하기 위해 존재한다.[3]
일반적인 파이썬 객체의 직렬화 및 역직렬화에는 `pickle` 모듈을 사용하는 것이 권장된다.[3]
4. 2. 자바 (Java)
RFC 2713에 따르면, 원격 호출을 위해 객체를 직렬화할 때 마샬링이 사용된다.[4] 마샬링된 객체는 원본 객체의 상태와 코드베이스(객체 코드를 로드할 수 있는 URL 목록을 의미하며 소스 코드가 아님)를 포함한다.[4] 객체 상태와 코드베이스를 변환하기 위해서는 언마샬링이 수행되어야 한다. 언마샬러 인터페이스는 코드베이스를 포함하는 마샬링된 데이터를 JAXB에서 실행 가능한 자바 객체로 자동 변환한다. 역직렬화할 수 있는 모든 객체는 언마샬링될 수 있지만, 그 반대가 반드시 참일 필요는 없다.[4]JAXB (Java Architecture for XML Binding)는 자바 객체를 마샬링하고 언마샬링하는 데 사용되는 일반적인 프레임워크이다. JAXB는 자바에서 지원하는 기본적인 데이터 유형과 표준 XML 스키마 데이터 유형 간의 상호 변환을 제공한다.[11]
4. 3. 닷넷 (.NET)
값을 기준으로 객체를 마샬링하면 객체의 복사본이 생성되어 서버로 직렬화된다.[5] 해당 객체에 대한 모든 메서드 호출은 서버에서 수행된다.`XmlSerializer`는 C 샤프 개발자가 C# 객체를 마샬링/직렬화 및 언마샬링/역직렬화하는 데 사용하는 프레임워크이다. C#이 Java보다 가진 장점 중 하나는 `XmlSerializer` 클래스가 포함되어 있어 마샬링을 기본적으로 지원한다는 것이다.
5. 마샬링 형식
데이터 마샬링에는 데이터 전송이 필요하며, 이를 위해 직렬화에 사용될 특정 데이터 형식이 활용된다.
5. 1. XML (Extensible Markup Language)
XML은 시스템 간에 데이터를 전송하는 데 사용되는 형식이다. 예를 들어, 마이크로소프트는 XML을 마이크로소프트 오피스 제품군(Word, Excel, Access, PowerPoint 등)의 다양한 구성 요소 파일 형식의 기반으로 사용한다(Office Open XML 참조).[10]XML은 일반적으로 장황한 와이어 형식을 생성하지만, "시작 태그", "종료 태그"와 같은 완전한 괄호 형식 구문은 보다 정확한 진단과 전송 또는 디스크 오류로부터의 더 쉬운 복구를 가능하게 한다. 또한 태그가 반복적으로 나타나기 때문에 표준 압축 방법을 사용하여 내용을 축소할 수 있다. 모든 오피스 파일 형식은 원시 XML을 압축하여 생성된다.[10] JSON(JavaScript Object Notation)과 같은 대체 형식은 더 간결하지만, 오류 복구에는 그만큼 덜 견고하다.
5. 2. JSON (JavaScript Object Notation)
JSON은 XML보다 더 간결하지만, 오류 복구에는 그만큼 덜 견고하다.[10]5. 3. 기타 형식
데이터 마샬링에는 일종의 데이터 전송이 필요하며, 이는 직렬화를 위해 선택하는 특정 데이터 형식을 활용한다.6. 한국 정보 기술 환경에서의 마샬링
(이전 출력이 없어 수정할 내용이 없습니다. 원본 소스가 제공되면 지침에 따라 위키텍스트를 작성하겠습니다.)
참조
[1]
웹사이트
What is the difference between Serialization and Marshaling?
https://stackoverflo[...]
Stack Exchange Network
2021-07-23
[2]
웹사이트
marshal — Internal Python object serialization
https://docs.python.[...]
Python Software Foundation
2016-11-04
[3]
웹사이트
marshal — Internal Python object serialization
https://docs.python.[...]
Python Software Foundation
2019-10-09
[4]
웹사이트
Schema for Representing Java(tm) Objects in an LDAP Directory
http://www.ietf.org/[...]
IETF
2016-11-04
[5]
웹사이트
How To Marshal an Object to a Remote Server by Value by Using Visual Basic .NET
https://web.archive.[...]
Microsoft
2016-11-04
[6]
웹사이트
Apartments and COM Threading Models
https://web.archive.[...]
2009-06-19
[7]
웹사이트
CoInitializeEx function (COM)
http://msdn.microsof[...]
2013-02-22
[8]
문서
Interop Marshaling Overview
http://msdn.microsof[...]
[9]
서적
Code Quality: The Open Source Perspective
http://www.spinellis[...]
[10]
문서
What is a DOCX file?
https://docs.filefor[...]
2020-10-13
[11]
웹사이트
Binding XML Schemas - The Java EE 5 Tutorial
http://docs.oracle.c[...]
2016-09-14
[12]
웹사이트
Using the XmlSerializer Class
https://msdn.microso[...]
2016-09-23
[13]
웹사이트
Unmarshaller (JAXB 2.2.3)
https://jaxb.java.ne[...]
2016-09-14
[14]
웹사이트
JAXBContext (JAXB 2.2.3)
https://jaxb.java.ne[...]
2016-09-23
[15]
웹사이트
JAXBElement (JAXB 2.2.3)
https://jaxb.java.ne[...]
2016-09-23
[16]
웹인용
Apartments and COM Threading Models
https://web.archive.[...]
2014-01-29
[17]
웹인용
CoInitializeEx function (COM)
http://msdn.microsof[...]
2013-02-22
[18]
문서
Interop Marshaling Overview
http://msdn.microsof[...]
[19]
문서
Marshal Python module
http://docs.python.o[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com